package com.xiaoKe.zhonghzu.global.base;

import android.content.Context;
import android.net.http.SslError;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * @ProjectName : app
 * @Author : Shijingna
 * @Time : 2023/11/24 4:05 下午
 * @Description : 文件描述
 */
public class WebViewBase extends WebView {
    public WebViewBase(@NonNull Context context) {
        super(context);
    }

    public WebViewBase(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public WebViewBase(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        WebSettings webSettings = getSettings();

// 启用JavaScript
        webSettings.setJavaScriptEnabled(true);

// 调整图片大小以适应WebView
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);

// 关闭缩放功能
        webSettings.setSupportZoom(false);
        webSettings.setBuiltInZoomControls(false);
        webSettings.setDisplayZoomControls(false);

// 关闭缓存
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

// 允许访问文件
        webSettings.setAllowFileAccess(true);

// 支持通过JS打开新窗口
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

// 自动加载图片
        webSettings.setLoadsImagesAutomatically(true);

// 开启DOM Storage功能
        webSettings.setDomStorageEnabled(true);

// 解决图片不显示问题
        webSettings.setBlockNetworkImage(false);

// 关闭App缓存
        webSettings.setAppCacheEnabled(false);

// 设置混合内容模式
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }

// 设置为ChromeClient以执行JS代码
        WebChromeClient webChromeClient = new WebChromeClient();
        setWebChromeClient(webChromeClient);

// 设置WebViewClient
        setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
                }
            }
        });

// 尝试关闭硬件加速
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setLayerType(View.LAYER_TYPE_HARDWARE, null);
        } else {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }

//        /**设置适应Html5的一些方法*/
//        clearCache(true);
//        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
//        //java与js回调，自定义方法
//        //1.java调用js
//        //2.js调用java
//        //首先java暴露接口，供js调用
//        /**
//         * obj:暴露的要调用的对象
//         * interfaceName：对象的映射名称 ,object的对象名，在js中可以直接调用
//         * 在html的js中：JSTest.showToast(msg)
//         * 可以直接访问JSTest，这是因为JSTest挂载到js的window对象下了
//         */
//


    }
}
